home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / modules / bashcomp.eselect next >
Text File  |  2006-04-12  |  5KB  |  233 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Id: bashcomp.eselect 216 2005-10-17 13:24:33Z ka0ttic $
  4.  
  5. DESCRIPTION="Manage contributed bash-completion scripts"
  6. MAINTAINER="ka0ttic@gentoo.org"
  7. SVN_DATE='$Date: 2005-10-17 14:24:33 +0100 (Mon, 17 Oct 2005) $'
  8. VERSION=$(svn_date_to_version "${SVN_DATE}")
  9.  
  10. find_targets() {
  11.     local targets bc x i=0
  12.     bcdirs[i]="${ROOT}/usr/share/bash-completion/*"
  13.  
  14.     if [[ -n "${ES_BASHCOMP_DIRS}" ]] ; then
  15.         for x in ${ES_BASHCOMP_DIRS} ; do
  16.             bcdirs[$((++i))]="${x}/*"
  17.         done
  18.     fi
  19.  
  20.     for bc in ${bcdirs[@]} ; do
  21.         [[ -e ${bc} && ${bc} != *~ ]] && targets="${targets}\n$(basename ${bc})"
  22.     done
  23.  
  24.     echo -ne ${targets} | sort -u
  25. }
  26.  
  27. is_enabled() {
  28.     local bcdir="${ROOT}/${HOME}/.bash_completion.d"
  29.     
  30.     if [[ ${1} == "--global" ]] ; then
  31.         bcdir="${ROOT}/etc/bash_completion.d"
  32.         shift
  33.     fi
  34.  
  35.     [[ -e ${bcdir}/${1} ]] || return 1
  36.     return 0
  37. }
  38.  
  39. ### list action ###
  40.  
  41. describe_list() {
  42.     echo "List available completions"
  43. }
  44.  
  45. describe_list_options() {
  46.     echo "--global : List globally enabled completions"
  47. }
  48.  
  49. do_list() {
  50.     local opts
  51.     targets=( $(find_targets) )
  52.     write_list_start "Available completions:"
  53.  
  54.     if [[ ${1} == "--global" ]] ; then
  55.         opts="--global"
  56.         shift
  57.     fi
  58.  
  59.     if [[ -n "${targets[@]}" ]] ; then
  60.         for (( n = 0 ; n < ${#targets[@]} ; ++n )) ; do
  61.             is_enabled ${opts:-} ${targets[${n}]} && \
  62.                 targets[${n}]="${targets[${n}]} $(highlight '*')"
  63.         done
  64.         write_numbered_list "${targets[@]}"
  65.     else
  66.         write_kv_list_entry "(none found)" ""
  67.     fi
  68.  
  69.     return 0
  70. }
  71.  
  72. ### enable action ###
  73.  
  74. describe_enable() {
  75.     echo "Enable specified completion(s)"
  76. }
  77.  
  78. describe_enable_parameters() {
  79.     echo "<target>"
  80. }
  81.  
  82. describe_enable_options() {
  83.     echo "<target> : Target name or number (from 'list' action)"
  84.     echo "--global : Enable for all users"
  85. }
  86.  
  87. do_enable() {
  88.     local bc bcdir="${ROOT}/${HOME}/.bash_completion.d"
  89.  
  90.     if [[ ${1} == "--global" ]] ; then
  91.         bcdir="${ROOT}/etc/bash_completion.d"
  92.         shift
  93.     fi
  94.  
  95.     [[ -z ${1} ]] && die -q "You didn't specify any completions to enable."
  96.  
  97.     # create directory if necessary
  98.     if [[ ! -d ${bcdir} && -w $(dirname ${bcdir}) ]] ; then
  99.         mkdir ${bcdir} || die -q "Failed to create ${bcdir}"
  100.     elif [[ ! -d ${bcdir} ]] ; then
  101.         die -q "You don't have permission to create ${bcdir}"
  102.     fi
  103.  
  104.     # make sure we have proper permissions
  105.     [[ -w ${bcdir} ]] || \
  106.         die -q "You don't have permission to write to ${bcdir}"
  107.  
  108.     targets=( $(find_targets) )
  109.  
  110.     for bc in $@ ; do
  111.         local file target=${bc}
  112.  
  113.         is_number "${target}" && \
  114.             target=${targets[$(( ${target} - 1 ))]}
  115.         
  116.         [[ -z "${target}" ]] && \
  117.             die -q "Target \"${bc}\" doesn't appear to be valid!"
  118.  
  119.         bc=${target}
  120.  
  121.         # ignore any unrecognized options
  122.         [[ ${bc} == --* ]] && continue
  123.  
  124.         # what form is the argument in?
  125.         case "${bc}" in
  126.             # absolute path
  127.             /*)
  128.                 file="${ROOT}/${bc}"
  129.                 ;;
  130.             # relative path
  131.             */*)
  132.                 file="${ROOT}/${PWD}/${bc}"
  133.                 ;;
  134.             # no path
  135.             *)
  136.                 # CWD
  137.                 if [[ -f ${bc} ]] ; then
  138.                     file="${ROOT}/${PWD}/${bc}"
  139.                 # assume /usr/share/bash-completion
  140.                 elif [[ -f ${ROOT}/usr/share/bash-completion/${bc} ]]
  141.                 then
  142.                     file="${ROOT}/usr/share/bash-completion/${bc}"
  143.                 else
  144.                     if [[ -n "${ES_BASHCOMP_DIRS}" ]] ; then
  145.                         for x in ${ES_BASHCOMP_DIRS} ; do
  146.                             [[ -f ${x}/${bc} ]] && file="${x}/${bc}"
  147.                         done
  148.                     fi
  149.  
  150.                     [[ -e ${file} ]] || \
  151.                         file="${ROOT}/usr/share/bash-completion/${bc}"
  152.                 fi
  153.                 ;;
  154.         esac
  155.  
  156.         # does it exist?
  157.         if [[ ! -e ${file} ]] ; then
  158.             write_error_msg "${file} doesn't exist"
  159.             continue
  160.         fi
  161.  
  162.         # already installed?
  163.         if [[ -e ${bcdir}/$(basename ${bc}) ]] ; then
  164.             write_error_msg "$(basename ${bc}) is already installed"
  165.             continue
  166.         fi
  167.  
  168.         # finally, create the symlink
  169.         ln -s "${file}" "${bcdir}" || \
  170.             die -q "Failed to create symlink from '${file}' to '${bcdir}'"
  171.     done
  172. }
  173.  
  174. ### disable action ###
  175.  
  176. describe_disable() {
  177.     echo "Disable specified completion(s)"
  178. }
  179.  
  180. describe_disable_parameters() {
  181.     echo "<target>"
  182. }
  183.  
  184. describe_disable_options() {
  185.     echo "<target> : Target name or number (from 'list' action)"
  186.     echo "--global : Disable for all users"
  187. }
  188.  
  189.  
  190. do_disable() {
  191.     local bc bcdir="${ROOT}/${HOME}/.bash_completion.d"
  192.  
  193.     if [[ ${1} == "--global" ]] ; then
  194.         bcdir="${ROOT}/etc/bash_completion.d"
  195.         shift
  196.     fi
  197.  
  198.     [[ -z ${1} ]] && die -q "You didn't specify any completions to disable"
  199.  
  200.     targets=( $(find_targets) )
  201.  
  202.     for bc in $@ ; do
  203.         local file target=${bc}
  204.  
  205.         is_number "${target}" && \
  206.             target=${targets[$(( ${target} - 1 ))]}
  207.  
  208.         [[ -z "${target}" ]] && \
  209.             die -q "Target \"${bc}\" doesn't appear to be valid!"
  210.  
  211.         bc=${target}
  212.         file="${bcdir}/${bc}"
  213.  
  214.         # ignore any unrecognized options
  215.         [[ ${bc} == --* ]] && continue
  216.  
  217.         # is in installed?
  218.         if [[ ! -e ${file} ]] ; then
  219.             write_error_msg "${bc} is not installed"
  220.             continue
  221.         fi
  222.  
  223.         # remove it if we have permissions
  224.         if [[ -w $(dirname ${file}) ]] ; then
  225.             rm "${file}" || die -q "Failed to remove ${file}"
  226.         else
  227.             die -q "You don't have permission to remove ${file}"
  228.         fi
  229.     done
  230. }
  231.  
  232. # vim: set ft=eselect :
  233.